home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- Copyright (c) 1992 Xerox Corporation. All rights reserved.
- Portions of this code were written by Stephen White, aka ghond.
- Use and copying of this software and preparation of derivative works based
- upon this software are permitted. Any distribution of this software or
- derivative works must comply with all applicable United States export
- control laws. This software is made available AS IS, and Xerox Corporation
- makes no warranty about the software, its performance or its conformity to
- any specification. Any person obtaining a copy of this software is requested
- to send their name and post office or electronic mail address to:
- Pavel Curtis
- Xerox PARC
- 3333 Coyote Hill Rd.
- Palo Alto, CA 94304
- Pavel@Xerox.Com
- *****************************************************************************/
-
- #ifndef Functions_h
- #define Functions_h 1
-
- #include "my-stdio.h"
-
- #include "bf_register.h" /* as a check only -- register_bf_*() functions */
- #include "bytecodes.h"
- #include "config.h"
- #include "structures.h"
-
- typedef struct {
- enum {BI_RAISE, BI_RETURN, BI_CALL} why;
- union {
- Var ret;
- enum error err;
- } u;
- Byte func_pc;
- void *func_data;
- } package;
-
- void register_bi_functions();
-
- package make_error_pack(enum error err);
- package make_var_pack(Var v);
- package no_var_pack(void);
- package make_call_pack(Byte func_pc, void *func_data);
-
- typedef package (*bf_type)(Var, Byte, void *, Objid);
- typedef void (*bf_write_type)(void *vdata);
- typedef void *(*bf_read_type)(FILE *f);
-
- struct bft_entry {
- const char *name;
- int minargs;
- int maxargs;
- var_type *prototype;
- bf_type func;
- bf_read_type read;
- bf_write_type write;
- };
-
- #define MAX_FUNC 256
- #define FUNC_NOT_FOUND MAX_FUNC
- /* valid function numbers are 0 - 255, or a total of 256 of them.
- function number 256 is reserved for func_not_found signal.
- hence valid function numbers will fit in one byte but the
- func_not_found signal will not */
-
- extern const char *name_func_by_num(unsigned);
- extern unsigned number_func_by_name(const char *);
-
- extern unsigned register_function(const char *, int, int, bf_type, ...);
- extern unsigned register_function_with_read_write(const char *, int, int,
- bf_type, bf_read_type,
- bf_write_type, ...);
- extern void free_bf_table(void);
-
- extern package call_bi_func(unsigned, Var, Byte, Objid, void *);
- /* will free or use Var arglist */
-
- extern void write_bi_func_data(void *vdata, Byte f_id);
- extern int read_bi_func_data(FILE *f, Byte f_id, void **bi_func_state);
-
- #endif
-
- /* $Log: functions.h,v $
- * Revision 1.8 1992/10/23 23:03:47 pavel
- * Added copyright notice.
- *
- * Revision 1.7 1992/10/21 03:02:35 pavel
- * Converted to use new automatic configuration system.
- *
- * Revision 1.6 1992/10/17 20:31:21 pavel
- * Changed return-type of read_bi_func_data() from char to int, for systems
- * that use unsigned chars.
- *
- * Revision 1.5 1992/08/14 00:00:56 pavel
- * Converted to a typedef of `var_type' = `enum var_type'.
- *
- * Revision 1.4 1992/08/13 21:25:52 pjames
- * Added register_bi_functions() which registers all bi_functions.
- *
- * Revision 1.3 1992/08/12 01:49:19 pjames
- * Var_types in bft_entry is now a pointer instead of a preallocated array.
- *
- * Revision 1.2 1992/08/10 17:38:21 pjames
- * Added func_pc and func_data to package struct. Built in functions now
- * receive an Objid (progr) instead of a Parse_Info. Changed
- * registration method to use var_args.
- *
- * Revision 1.1 1992/07/20 23:23:12 pavel
- * Initial RCS-controlled version.
- */
-